 //函数的习题:二分法查找数组内的值
 #include <stdio.h>
 int binary_search(int add[],int k,int sz)//不用写数组长度啊啊，
 //不仅如此，在这里定义的参数就不要在函数内部又定义一次了，是的，我脑子又抽了。。
 {
 //	sz=sizeof(add)/sizeof(add[0]);//长度不要在这里计算，为什么?
 //因为这是数组，实际上在调用函数中的数组都是以指针的形式传送的，
 //什么意思呢？意思就是如果你在函数内部计算数组的长度，其实是在计算数组的地址长度，
 //地址嘛，不是 4（32位）就是 8（64位）
 //如果传的是数组，那相当于在函数内部又要创造一个数组，如果数组长度为一万怎么办，这么长，主函数一个，这里一个，是不是太浪费（占用）空间了
 	int left=0,right=sz-1;//定义左右尽头的数值，用于确定中间值，并调整计算范围
// 	while(left<=right)//忘记写循环了，难搞，不写循环怎么调整长度啊
// 	{
 	int mid=(right+left)/2;//好像错了，是(left+(right-left))/2
 	if(k>add[mid])
 	{
 		left=mid+1;//当k>add[mid]即 k在右边的范围时，是不是应该调整左边的尽头，去掉左边和中间（因为 k也不在中间，所以+1）
	 }
	else if(k<add[mid])
 	{
 		right=mid-1;//一样的道理，当k<add[mid]即 k在左边的范围时，是不是应该调整右边的尽头，去掉右边和中间
	 }
	else
 	{
 		return mid;//我们只有当 k在中间时才返回值，这就是二分查法
	 }
	 return -1;//第一次写错了，一直返回-1[大哭]
//	}
//	 return -1;//为了区分下标，因为数组下标从 0开始
//当整个循环结束的时候，都没有返回值，那么就往下执行return -1;
}
 int main()
 {
	int binary_search(int add[],int k,int sz);
 	int arr[]={1,2,3,4,5,6,7,8,9};//初始化
 	int sz=sizeof(arr);//看，又写错了哈哈哈。这是整个数组占内存的空间，但是我们需要的是数组的个数
 //	int sz=sizeof(arr)/sizeof(arr[0]);//
 	int j=0;
 	printf("please input a number:\n");
 	scanf("%d",&j);//又又又忘了，加&，加&，加&，又是这个检查不出来的错误，以后记得清醒点
	int ret=binary_search(arr,j,sz);
 	if(ret==-1)
 	{
 		printf("Not found!\n");
	 }
	else
 	{
 		printf("The number is at index: %d\n", ret);
    }
	return 0;
 }